package com.stars.empoly.utils

import android.Manifest
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import com.baidu.location.BDAbstractLocationListener
import com.baidu.location.BDLocation
import com.baidu.location.LocationClient
import com.baidu.location.LocationClientOption
import com.eazypermissions.common.model.PermissionResult
import com.eazypermissions.coroutinespermission.PermissionManager
import com.stars.empoly.inte.ChoiceLocation
import com.yanzhenjie.permission.runtime.Permission


/**
 * 百度定图--单次获取位置
 *on 2022/9/27
 */
object CurrentOneLocationUtils {

    private var choiceListData: ChoiceLocation? = null

    suspend fun getStartLocal(activity: AppCompatActivity, choiceListData: ChoiceLocation?) {
        this.choiceListData = choiceListData
//         AndPermission.with(activity)
//                 .runtime()
//                 .permission(Permission.ACCESS_COARSE_LOCATION,
//                         Permission.READ_EXTERNAL_STORAGE,
//                         Permission.WRITE_EXTERNAL_STORAGE
//                 )
//                 .onGranted(Action<List<String?>?>
//
//                 {
//                     getCurrentLocation(activity.applicationContext)
//
//                 }
//                 )
//                 .start()

        if (PermissionManager.requestPermissions(
                activity, 1,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Permission.ACCESS_FINE_LOCATION
            )
                    !is PermissionResult.PermissionGranted
        ) return
        getCurrentLocation(activity.applicationContext)


    }


    private var locationClient: LocationClient? = null


    private fun getCurrentLocation(context: Context) {

        locationClient = LocationClient(context)
        // 设置定位条件
        val option = LocationClientOption()

        option.setIsNeedLocationPoiList(true) //获取附近 poi

//        option.setIsNeedLocationDescribe(true); //位置语义化
        option.isOpenGps = true // 是否打开GPS

        option.setCoorType("bd09ll") // 设置返回值的坐标类型

//          option.setScanSpan(180000) // 设置定时定位的时间间隔。单位毫秒 3分钟一次
//        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setAddrType("all")
        option.setOnceLocation(true)
        option.setIgnoreKillProcess(false) //可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死

        locationClient?.locOption = option


        locationClient?.registerLocationListener(object :BDAbstractLocationListener(){
            override fun onReceiveLocation(amapLocation: BDLocation?) {
              if(null!=amapLocation){
                  if (null != choiceListData) {
                      choiceListData!!.onRestuse(amapLocation.latitude.toString(),
                          amapLocation.longitude.toString(), amapLocation.address.city)
                  }
              }
            }
        })
        locationClient?.locOption = option

        locationClient?.start()

//        /*
//         * 当所设的整数值大于等于1000（ms）时，定位SDK内部使用定时定位模式。调用requestLocation(
//         * )后，每隔设定的时间，定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化，就不会发起网络请求，
//         * 返回上一次定位的结果；如果发现位置改变，就进行网络请求进行定位，得到新的定位结果。
//         * 定时定位时，调用一次requestLocation，会定时监听到定位结果。
//         */
//
//
//        /*
//         * 当所设的整数值大于等于1000（ms）时，定位SDK内部使用定时定位模式。调用requestLocation(
//         * )后，每隔设定的时间，定位SDK就会进行一次定位。如果定位SDK根据定位依据发现位置没有发生变化，就不会发起网络请求，
//         * 返回上一次定位的结果；如果发现位置改变，就进行网络请求进行定位，得到新的定位结果。
//         * 定时定位时，调用一次requestLocation，会定时监听到定位结果。
//         */locationClient!!.requestLocation()
//        locationClient!!.stop()




}


}
